検証: XACT_ABORTをONにしてトランザクションを戻す
code:cmd_xact_abort.sql
SET XACT_ABORT ON;
SELECT @@TRANCOUNT AS TRANSACTION_COUNT, XACT_STATE() AS XACT_STATE, @@OPTIONS AS OPTIONS;
table:result.csv
TRANSACTION_COUNT XACT_STATE OPTIONS
0 1 21816
code:cmd_xact_abort.sql
BEGIN TRANSACTION;
SELECT @@TRANCOUNT AS TRANSACTION_COUNT, XACT_STATE() AS XACT_STATE, @@OPTIONS AS OPTIONS;
table:result.csv
TRANSACTION_COUNT XACT_STATE OPTIONS
1 1 21816
テーブルの初期状態を確認
何か起こったらこの状態に戻ってきたい
このテーブルはname, address, tellで一意となる
code:cmd_xact_abort.sql
SELECT name, address, tell FROM SAMPLE_TABLE;
table:result.csv
name address tell
データを操作する
code:cmd_xact_abort.sql
INSERT INTO SAMPLE_TABLE VALUES('Go','Japan','090-9999-9999');
INSERT INTO SAMPLE_TABLE VALUES('Go','Japan','080-8888-8888');
INSERT INTO SAMPLE_TABLE VALUES('Go','Japan','070-7777-7777');
INSERT INTO SAMPLE_TABLE VALUES('Go','Japan','070-7777-7777');--これが重複する
code:error.log
制約 'PK_SAMPLE_TABLE' の PRIMARY KEY 違反。
オブジェクト 'dbo.SAMPLE_TABLE' には重複するキーを挿入できません。
重複するキーの値は ('Go','Japan','070-7777-7777') です。
ここまでは一緒
今度はテーブルを確認しても初期状態に戻っている
code:cmd_xact_abort.sql
SELECT name, address, tell FROM SAMPLE_TABLE;
table:result.csv
name address tell
トランザクション状態を確認すると0トランザクションになってる=ロールバックされてる
code:cmd_xact_abort.sql
SELECT @@TRANCOUNT AS TRANSACTION_COUNT, XACT_STATE() AS XACT_STATE, @@OPTIONS AS OPTIONS;
table:result.csv
TRANSACTION_COUNT XACT_STATE OPTIONS
0 1 21816